package acwing.链表;

import java.util.Scanner;

/**
 * @description:
 * @author: qian
 * @createDate: 2021/11/12
 */
public class SingleLink {

    private static final int N = 100010;
    private static int[]e = new int[N]; // 表示节点e[i]的值
    private static int[]ne = new int[N]; // 表示节点ne[i] 的i的下一个节点
    private static int head,idx; // idx表示现在已经用到了哪个点

    public static void init() {
        head = -1;
        idx = 0;
    }
    //把k插入到头结点后
    public static void addToHead(int k) {
        // 1. 将k指向head指向的值（也就是head里面存的值）
        // 2. 将head 指向 k;
        e[idx] = k;
        ne[idx] = head;
        head = idx;
        idx++;
    }
    //把x插入到下标是k的节点后面
    public static void add(int k, int x) {
        // 1. 当前节点的指针指向k节点指向的节点
        // 2.
        e[idx] = x;
        ne[idx] = ne[k];
        ne[k] = idx;
        idx++;
    }

    // 将下边是k的后面的一个点删除
    public static void remove(int k) {

        ne[k] = ne[ne[k]];
    }

    public static void main(String[] args) {

        init();
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        while (m-- != 0) {
            String s = in.next();
            if (s.equals("H")) {
                int i = in.nextInt();
                addToHead(i);
            }
            else if (s.equals("D")) {
                int i = in.nextInt();
                if (i == 0) head = ne[head];
                else remove(i - 1);
            }
            else {
                int k = in.nextInt();
                int x = in.nextInt();
                add(k - 1, x);
            }
        }
        for (int i = head; i != -1; i = ne[i]) System.out.println(e[i] + " ");
    }
}
